﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using App_Persistencia;
using System.Data;

namespace App_Negocio
{
    public class Evento
    {
        List<Mesa> listaMesa;

        public List<Mesa> ListaMesa
        {
            get { return listaMesa; }
            set { listaMesa = value; }
        }
        int id;

        public int Id
        {
            get { return id; }
            set { id = value; }
        }

        float montoTotal;

        public float MontoTotal
        {
            get { return montoTotal; }
            set { montoTotal = value; }
        }

        int cantPersonas;

        public int CantPersonas
        {
            get { return cantPersonas; }
            set { cantPersonas = value; }
        }

        DateTime fechaEvento;

        public DateTime FechaEvento
        {
            get { return fechaEvento; }
            set { fechaEvento = value; }
        }

        string comentario;

        public string Comentario
        {
            get { return comentario; }
            set { comentario = value; }
        }

        EventoTipo tipoEvento;

        public EventoTipo TipoEvento
        {
            get { return tipoEvento; }
            set { tipoEvento = value; }
        }

        Evento_Estado eveEstado;

        public Evento_Estado EveEstado
        {
            get { return eveEstado; }
            set { eveEstado = value; }
        }

        string horaInicio;

        public string HoraInicio
        {
            get { return horaInicio; }
            set { horaInicio = value; }
        }
        string horaFin;

        public string HoraFin
        {
            get { return horaFin; }
            set { horaFin = value; }
        }
        Cliente cliente;

        public Cliente Cliente
        {
            get { return cliente; }
            set { cliente = value; }
        }
        
        Salon salon;

        public Salon Salon
        {
            get { return salon; }
            set { salon = value; }
        }

        private string imgDistribucionMesa;

        public string ImgDistribucionMesa
        {
            get { return imgDistribucionMesa; }
            set { imgDistribucionMesa = value; }
        }

        
        List<Bebida> bebida = new List<Bebida>();

        public List<Bebida> Bebida
        {
            get { return bebida; }
            set { bebida = value; }
        }

        List<Servicio_Adicional> servicioAdicional = new List<Servicio_Adicional>();

        public List<Servicio_Adicional> ServicioAdicional
        {
            get { return servicioAdicional; }
            set { servicioAdicional = value; }
        }
        
        List<Evento_Detalle> eventoDetalle = new List<Evento_Detalle>();

        public List<Evento_Detalle> EventoDetalle
        {
            get { return eventoDetalle; }
            set { eventoDetalle = value; }
        }

        List<Cobro> cobros = new List<Cobro>();

        public List<Cobro> Cobros
        {
            get { return cobros; }
            set { cobros = value; }
        }

        List<Cronograma> actividades;

        public List<Cronograma> Actividades
        {
            get { return actividades; }
            set { actividades = value; }
        }

        List<Empleado> empleados;
   
        public DataTable listarEventos()
        {
            Evento_Data evento = new Evento_Data();
            DataTable tabla = evento.popularEventos();
            return tabla;
        }

        public DataTable listarCobros()
        {
            Evento_Data evento = new Evento_Data(); Cobro_Data cobro = new Cobro_Data();
            evento.Id = id;
            DataTable tabla = evento.misCobros();
            return tabla;
        }

        public void guardarCobro()
        {

            Evento_Data evento = new Evento_Data();
           


            List<Cobro_Data> cobroDataList= new List<Cobro_Data>();

            foreach (Cobro cob in Cobros)
            {
                Cobro_Data cobroData = new Cobro_Data();
                cobroData.Monto = cob.Monto;
                cobroData.Fecha = cob.Fecha;
                cobroDataList.Add(cobroData);
            }

            evento.Id = id;
            evento.Cobros=cobroDataList;
            
            try
            {
                evento.guardarCobro();
            }
            catch (SystemException ex)
            {
                throw new SystemException(ex.Message);
            }
        }

        public void guardarEvento(out int idEvento)
        {
            idEvento = 0;
            App_Persistencia.Cliente_Data clienteData = new Cliente_Data();
            clienteData.ClienteId = cliente.ClienteId;

            App_Persistencia.Salon_Data salonData = new Salon_Data();
            salonData.Id = salon.Id;

            

            App_Persistencia.EventoTipo_Data evTipo = new EventoTipo_Data();
            evTipo.Id = tipoEvento.Id;


            List<Servicio_Adicional_Data> sAdicionalList = new List<Servicio_Adicional_Data>();

            foreach (Servicio_Adicional sAd in ServicioAdicional)
            {
                App_Persistencia.Servicio_Adicional_Data sAdicData = new Servicio_Adicional_Data();
                sAdicData.Id = sAd.Id;
                sAdicionalList.Add(sAdicData);
            }

           List<Bebida_Data> bebidaDataList = new List<Bebida_Data>();

            foreach (Bebida beb in Bebida)
            {
                App_Persistencia.Bebida_Data bebidaData = new Bebida_Data();
                bebidaData.Id = beb.Id;
                bebidaDataList.Add(bebidaData);
            }


            List<Evento_Detalle_Data> eDet = new List<Evento_Detalle_Data>();

            foreach (Evento_Detalle ed in eventoDetalle)
            {
                App_Persistencia.Menu_Data menuData = new Menu_Data();
                App_Persistencia.Evento_Detalle_Data evenDetData = new Evento_Detalle_Data();
                menuData.Id = ed.Menu.Id;
                evenDetData.Menu = menuData;
                evenDetData.Cantidad = ed.Cantidad;
                evenDetData.Precio = ed.Precio;
                eDet.Add(evenDetData);
            }

            //App_Persistencia.Evento_Estado_Data estado = new Evento_Estado_Data();
            //estado.Numero = estado.Numero;//CONTROLAR
            App_Persistencia.Evento_Data evento = new Evento_Data();
            evento.Comentario = comentario;
            evento.FechaEvento = fechaEvento;
            evento.CantPersonas = cantPersonas;
            evento.MontoTotal = montoTotal;
            evento.Salon = salonData;
            evento.Bebida = bebidaDataList;
            evento.EventoDetalle = eDet;
            evento.TipoEvento = evTipo;
            evento.EveEstado = new Evento_Estado_Data();
            evento.EveEstado.Numero = EveEstado.Numero;
            evento.ImgDistribucionMesa = ImgDistribucionMesa;
            //evento.EveEstado = estado;
            evento.Cliente = clienteData;
            evento.HoraInicio = HoraInicio;
            evento.HoraFin = HoraFin;

            try
            {
                evento.guardarEvento(out idEvento);
            }
            catch (SystemException ex)
            {
                throw new SystemException(ex.Message);
            }
        }

        public void cambiarEstado()
        {
            Evento_Data eve = new Evento_Data();
            eve.Id = Id;
            eve.EveEstado = new Evento_Estado_Data();
            eve.EveEstado.Numero = EveEstado.Numero;
            eve.cambiarEstado();
        }

        public DataTable buscarEventosCliente()
        {
            Evento_Data evento = new Evento_Data();
            evento.Cliente= new Cliente_Data();
            evento.Cliente.ClienteId = Cliente.ClienteId;
            DataTable tabla = evento.buscarEventosCliente();
            return tabla;

        }


        public void guardarEmpleados(List<Empleado> empleados)
        {

            List<Empleado_Data> empList = new List<Empleado_Data>();

            foreach (Empleado emp in empleados)
            {
                App_Persistencia.Empleado_Data empData = new Empleado_Data();
                empData.EmpleadoId = emp.EmpleadoId;
                empList.Add(empData);
            }

            App_Persistencia.Evento_Data evento = new Evento_Data();
            evento.Id = id;

            try
            {
                evento.guardarEmpleados(empList);
            }
            catch (SystemException ex)
            {
                throw new SystemException(ex.Message);
            }


        }

        public int cantidadInvitados()
        {
            Evento_Data evento = new Evento_Data();
            evento.Id = id;
            int cantidad = evento.cantidadInvitados();
            return cantidad;
        }

        public void guardarActividades()
        {

            List<Cronograma_Data> cronListData = new List<Cronograma_Data>();

            foreach (Cronograma cron in actividades)
            {
                App_Persistencia.Cronograma_Data cronData = new Cronograma_Data();
                App_Persistencia.Actividad_Data actData = new Actividad_Data();
                actData.Id = cron.Actividad.Id;
                actData.Nombre = cron.Actividad.Nombre;
                cronData.Actividad = actData;
                cronData.FechayHora = cron.FechayHora;
                cronData.Observacion = cron.Observacion;

                cronListData.Add(cronData);
            }


            App_Persistencia.Evento_Data evento = new Evento_Data();
            evento.Id = id;
            evento.Actividades = cronListData;

            try
            {
                evento.guardarActividades();
            }
            catch (SystemException ex)
            {
                throw new SystemException(ex.Message);
            }



        }

        public DataTable buscarEvento()
        {
            Evento_Data evento = new Evento_Data();
            evento.Id = Id;
            DataTable tabla = evento.buscarEvento();
            return tabla;

        }

        
        //MAURI:CREO QUE NO SE USA MAS
        public Boolean consultarLlegados()
        {
            App_Persistencia.Evento_Data evento = new App_Persistencia.Evento_Data();
            evento.Id = id;
            Boolean llegaron = evento.consultarLlegados();

            return llegaron;
        }

        /// <summary>
        /// Creado por Mauri
        /// </summary>
        /// <returns></returns>
        public float consultarPorcentajeInvitadosLlegados()
        {
            App_Persistencia.Evento_Data evento = new App_Persistencia.Evento_Data();
            evento.Id = Id;
            evento.CantPersonas = 3;
            float llegaron = evento.consultarPorcentajeInvitadosLlegados();
            return llegaron;
        }
        public DataTable traerEventosNoFinalizados()
        {
            Evento_Data ev = new Evento_Data();
            return ev.traerEventosNoFinalizados();
        }

    }
}
